/*
 * Partida.h
 *
 *  Created on: Nov 2, 2013
 *      Author: javier
 */

#ifndef PARTIDA_H_
#define PARTIDA_H_

#include "Tablero.h"
#include "Pieza.h"
#include "Button.h"
#include "GoldenStar.h"
#include "MiniBar.h"
#include "Posicion.h"
#include "jsoncpp/json/json.h"
#include <vector>


class Partida {
public:
	explicit Partida(int nivel);
	void validarTablero();
	void realizarMovimiento(unsigned int x, unsigned int y);
	int getHorMatches(unsigned int x, unsigned int y);
	int getVerMatches(unsigned int x, unsigned int y);
	void imprimirTablero();
	void bajarGolosinas();
	CeldaBase * getCelda(unsigned int x, unsigned int y);
	void eliminarCeldas();
	unsigned int getFilas();
	unsigned int getColumnas();
	void eliminarGolosinas(Posicion p1);
	void eliminarGolosinas();
	void bajarGolosinasDesde(unsigned int x, unsigned int y);
	bool movimientoValido(unsigned int x, unsigned int y);
	bool intercambiarGolosinas(Posicion p1, Posicion p2);
	void llenarTablero();
	void completarTablero();
	std::vector<CeldaBase*>* getCeldas();
	void limpiarVectores();
	void setearEspecial(unsigned int hMatches, unsigned int vMatches,
			unsigned int x, unsigned int y, Pieza::color c);
	std::vector<Posicion> getPosicionesAEliminar();
	std::vector<Pieza*> getARellenar();
	void eliminarPiezasMismoColor(Pieza::color c);
	std::vector<Posicion> getPosicionesEspeciales();
	std::vector<Pieza*> getEspeciales();
	void eliminarFilaCompleta(unsigned int nFil, unsigned int nCol,
										std::vector<Posicion> & posiciones);
	void eliminarColumnaCompleta(unsigned int nFil, unsigned int nCol,
										std::vector<Posicion> & posiciones);
	bool verificarMatchs();
	int getPuntosJugada();
	void sumarPuntos(int puntos);
	void vaciarPuntosJugada();
	bool hayMatchesPosibles();
	void setMultiplicador(int mult);
	int getMultiplicador();
	Json::Value vecToJson();
	int getMaxPuntos();

private:
        Tablero miTablero;
		std::vector<Posicion> aEliminar;
		std::vector<Pieza*> aRellenar;
		std::vector<Posicion> posEspeciales;
		std::vector<Pieza*> especiales;
		int puntosJugada;
		int multiplicador;
		int maxPuntos;
};

#endif /* PARTIDA_H_ */
